
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.List;


class test3 {
    static String[] arr1=new String[3];
    static int[] arr2=new int[3];
    static int i=0;
    static int j=0;
    static int result;
    static int result1;
    static char a;
    static String c=null;
    public static void main(String[] args) throws IOException {




        BufferedReader br = new BufferedReader(new FileReader("C:\\\\Users\\\\86199\\\\Desktop\\\\百度分词词库.txt"));
        //以FileReader的对象作为参数，创建BufferedReader的对象（br这个对象就代表一个具有缓冲功能的输入流）
        List<String> list = new ArrayList<>();//使用List接口的实现类ArrayList初始化一个字符串型的列表对象list
        String line;
        while ((line=br.readLine())!=null) {
//line=br.readLine()方法, 每次读取一行成功后, 便返回一个字符串类型的数据 , 并且把读取的数据赋值给line,若没有读取到数据就返回null
            list.add(line);//使用 List 接口的实现类 ArrayList 初始化一个字符串型的列表对象list，然后调用 add 方法向列表list中添加数据line
        }//一直循环读取，每次读取一行，把读取的数据赋值给list

        br.close();//关闭br，同时释放内存

        do{//实现多次查询
            Scanner sc=new Scanner(System.in);

            System.out.println("请输入您要查询的词：");

            c=sc.nextLine() ;

            boolean status = list.contains(c);//list调用contains（）方法传递元素c，执行遍历，逐个对比，若有等于该元素的值则返回true，反正则false
//查看集合中是否含有“c”的信息
            if(status){
                System.out.println("包含该词。");
            }else{
                System.out.println("不包含该词。");
                break;
            }

            result1 = list.indexOf(c);//返回list列表中指定元素"c"的第一个匹配项的索引，或者如果list列表中不包含该元素返回-1。
            System.out.println("您查询的‘"+c+"’在第"+(result1+1)+"行");//索引号从0开始
            result=result1+1;
            arr1[i]=c;
            arr2[i]= result;

            System.out.println("是否需要进行下一次查找？(y/n)");
            while(true){//判断是否进行下一次查询
                a=sc.next().charAt(0);
                if(a=='n'){
                    break;
                }
                else if(a=='y'){
                    ll();
                    i++;
                    break;
                }
                else{
                    System.out.println("您的输入有误请核对后重新输入！");
                }
            }

        }while(a=='y');
        j=i;

        System.out.println("总结如下：");
        for(i=0;i<=j;i++){//使用for循环将查询过的单词以行的形式列出
            System.out.println("您查找的'"+arr1[i]+"'第"+arr2[i]+"行。");
        }

    }


    private static void ll(){
        boolean flag = false;
        for (int i =0;i<arr1.length;i++) {
            if (arr1[i] != null) {
                flag = true;
                break;
            }
        }

        if(!flag){
            //数组没有装满,
            for (int i=0;i<arr1.length;i++) {
                if (arr1[i]==null) {
                    arr1[i] = c;
                    arr2[i] =result;
                    break;
                }
            }

        }else {
            //数组已经装满，对数组进行扩容
            String[] newArr1 = new String[arr1.length+3];
            int[] newArr2 = new int[arr1.length+3];

            //将原数组内的内容复制到新的数组里，可以通过for循环来实现，也可以通过arraycopy实现
            for (int i=0;i<arr1.length;i++){
                newArr1[i]=arr1[i];
                newArr2[i]= arr2[i];
            }
            System.arraycopy(arr1,0,newArr1,0,arr1.length);
            System.arraycopy(arr2,0,newArr2,0,arr2.length);

            arr1=newArr1;
            arr2=newArr2;
            //将用户名和密码存入数组
            for (int i=0;i<arr1.length;i++) {
                if (arr1[i]==null) {
                    arr1[i] = c;
                    arr2[i] =result;
                    break;
                }
            }
        }
    }
}



